/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package MainClass;
import Connection.Conexao;
import MyExceptions.*;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;

/**
 *
 * @author Murilo
 */
public class Conta {
    private int NumeroConta;
    private String Senha;
    private double Saldo;

    public Conta(String Senha, double Saldo) {
        this.Senha = Senha;
        this.Saldo = Saldo;
    }

    public Conta() {
    }
    
    public void Saque(String Senha, double ValorSacado)
            throws ExceptionSaque, ExceptionSenhaInvalida, Exception{
        if(!Senha.equals(this.Senha))throw new ExceptionSenhaInvalida(Senha, Senha.length(), new Date());
        
        if(ValorSacado > this.Saldo) throw new ExceptionSaldoInsuficiente(this.Saldo);
        this.Saldo = this.Saldo - ValorSacado;
        Connection conn;
        conn = Conexao.getInstancia().getConnection();
        PreparedStatement pstmt = null;
        String SQL = "UPDATE CONTA SET SALDO = ? WHERE NUMERO_CONTA = ?";
        try{
            pstmt = conn.prepareStatement(SQL);
            pstmt.setDouble(1, Saldo);
            pstmt.setInt(2, NumeroConta);
            pstmt.execute();
        }catch (SQLException e) {
            throw new Exception("Houve um erro ao executar a instrucao SQL");
        } finally {
            Conexao.getInstancia().closeConnection(conn, pstmt, null);
        }
    }
    
    
    public boolean equals(Object obj){
        Conta outraConta = (Conta) obj;
        if(this.NumeroConta == outraConta.NumeroConta)
            return true;
        else
            return false; 
    }

    public Conta(int NumeroConta) {
        this.NumeroConta = NumeroConta;
    }

    public int getNumeroConta() {
        return NumeroConta;
    }

    public void setNumeroConta(int NumeroConta) {
        this.NumeroConta = NumeroConta;
    }

    public String getSenha() {
        return Senha;
    }

    public void setSenha(String Senha) {
        this.Senha = Senha;
    }

    public double getSaldo() {
        return Saldo;
    }

    public void setSaldo(double Saldo) {
        this.Saldo = Saldo;
    }
}
